﻿Public Class MenuOrder
    Inherits CoreClass

    ' Gan gia tri cho bien MenuID de kiem tra quyen cua ng dung, gia tri nay lay trog DB va dc fix
    Dim chkMenu As Integer = getIDMenu(5)
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Try
            ' Set sự kiện submit cho nút chỉ định
            Page.Form.DefaultButton = btnNew.UniqueID
            chkPms((CInt(Session("GroupId").ToString())), chkMenu)

            If Not Page.IsPostBack Then
                If chkView = 1 Then
                    loadCatLevel()
                    loadCat(0)
                    loadStt()
                    BindGridCat()
                Else
                    'MsgBox(chkView & chkUpdate & chkDelete)
                    objAlert.ErrorBox(Page, "Bạn không có quyền truy xuất trang này, liên hệ với Admin để biết thêm chi tiết.")
                    'Response.Redirect("Default.aspx")
                End If
            End If
            cbxStatus.Items(1).Attributes.Add("style", "color:red;background-color:White;")
            cbxStatus.Items(2).Attributes.Add("style", "color:green;background-color:White;")
        Catch ex As Exception
            Response.Redirect("/Inside/xLogin.aspx?redirect=" & Request.Url.PathAndQuery.Replace("?", "|"))
        End Try
    End Sub


#Region "Các sự kiện của grid và Button"

#Region "Grid Category"
    ' Xử lý sự kiện Order Category trên grid cha
    Private Sub gridCat_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles gridCat.RowCommand
        Dim idCat As Integer = Convert.ToInt32(e.CommandArgument.ToString)
        If e.CommandName = "UpCat" Then
            sql = "spi_CatOrder "
            sql &= objFunction.ValueCheck(idCat) & ","
            sql &= "'up'"
        Else
            sql = "spi_CatOrder "
            sql &= objFunction.ValueCheck(idCat) & ","
            sql &= "'down'"
        End If
        objDataRead.ExeReader(sql)
        If objDataRead.dataRead.Read Then
            If objDataRead.dataRead("Return").Equals(0) Then
                If e.CommandName = "UpCat" Then
                    objAlert.InfoBox(Page, "Danh mục đã ở vị trí trên cùng.", "")
                Else
                    objAlert.InfoBox(Page, "Danh mục đã ở vị trí dưới cùng.", "")
                End If
            Else
                Response.Redirect("MenuOrder.aspx#list")
            End If
        End If
    End Sub

    ' Gọi sự kiện bind data cho Grid Sub Cat mỗi khi Grid Cat tạo ra 1 record
    Private Sub gridCat_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gridCat.RowDataBound
        ' Khai bao doi tuong label de lay ID category
        Dim lbIDCat As Label = CType(e.Row.FindControl("lbl_ID"), Label)
        Try
            ' Khai bao bien ID category luu gia tri cua label ID
            Dim idCat As Integer = Integer.Parse(lbIDCat.Text)
            ' Khai bao doi tuong grid Sub Cat de fill du lieu
            Dim objGrid As GridView = CType(e.Row.FindControl("gridSubCat"), GridView)
            BindGridSubCat(idCat, objGrid)
        Catch ex As Exception
            
        End Try
    End Sub
#End Region

#Region "Grid Sub Category"

    ' Xử lý sự kiện Order Category trên grid con
    Protected Sub gridsubCat_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs)
        Dim idSubCat As Integer = Convert.ToInt32(e.CommandArgument.ToString)
        'Dim gridSubCat As GridView = CType(sender, GridView)
        'Dim idCat As Integer = Convert.ToInt32(gridSubCat.DataKeys.Item(1).Value.ToString)
        'MsgBox(idCat & " -- " & idSubCat)

        If e.CommandName = "UpSubCat" Then
            sql = "spi_SubCatOrder "
            sql &= objFunction.ValueCheck(idSubCat) & ","
            sql &= "'up'"
        Else
            sql = "spi_SubCatOrder "
            sql &= objFunction.ValueCheck(idSubCat) & ","
            sql &= "'down'"
        End If
        objDataRead.ExeReader(sql)
        If objDataRead.dataRead.Read Then
            If objDataRead.dataRead("Return").Equals(0) Then
                If e.CommandName = "UpSubCat" Then
                    objAlert.InfoBox(Page, "Danh mục đã ở vị trí trên cùng.", "")
                Else
                    objAlert.InfoBox(Page, "Danh mục đã ở vị trí dưới cùng.", "")
                End If
            Else
                Response.Redirect("MenuOrder.aspx#list")
            End If
        End If

    End Sub

    ' Sự kiện DataBound của Grid Sub Cat
    Protected Sub gridSubCat_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs)
        If e.Row.RowType = DataControlRowType.DataRow Then
            Dim cbo As DropDownList = CType(e.Row.FindControl("ddlSubStt"), DropDownList)
            If Not cbo Is Nothing Then BindStatus(cbo)
        End If
    End Sub
#End Region

    ' Sự kiện thêm mới khi click nút thêm mới
    Private Sub btnNew_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnNew.Click
        ' Goi ham kiem tra quyen them moi
        If Not chkUpdate = 1 Then
            objAlert.ErrorBox(Page, "Bạn không có quuyền sử dụng tính năng này. <br><br>Liên hệ với Admin để biết thêm chi tiết.")
            Exit Sub
        End If

        ' Goi ham kiem tra Form
        If Not chkField() Then
            Exit Sub
        End If

        Try
            ' Nếu là thêm mới Menu cấp 1
            If cbxLevel.SelectedValue = 1 Then
                sql = "spi_CatUpdate 0,"
                sql &= objFunction.FieldUniCk(txtCatName.Text) & ","
                sql &= "''" & "," ' Cat URL 
                sql &= objFunction.ValueCheck(cbxStatus.SelectedValue) & ","
                sql &= "''" & "," ' Cat Icon
                sql &= objFunction.ValueCheck(cbxType.SelectedValue) & ","
                sql &= "1" ' Action: 0=delete, 1=add new, 2=update
                objDataRead.ExeReader(sql)
                objFunction.writeLog(Session("UserId"), 1, "Tạo mới Danh mục cấp 1", "Tên danh mục :" & txtCatName.Text, "Trạng thái: " & cbxStatus.SelectedItem.Text)
            Else ' Thêm mới menu cấp 2
                sql = "spi_SubCatUpdate "
                sql &= objFunction.ValueCheck(0) & ", "
                sql &= objFunction.ValueCheck(objFunction.ValueCheck(cbxCat.SelectedValue)) & ", "
                sql &= objFunction.FieldUniCk(txtCatName.Text) & ", "
                sql &= "''" & ", "
                sql &= objFunction.ValueCheck(cbxStatus.SelectedValue) & ", "
                sql &= "''" & ", "
                sql &= objFunction.ValueCheck(cbxType.SelectedValue) & ","
                sql &= objFunction.ValueCheck(1)
                objData.ExeNonQuery(sql)
                objFunction.writeLog(Session("UserId"), 1, "Tạo mới Danh mục cấp 2", "Tên danh mục :" & txtCatName.Text, "Trạng thái: " & cbxStatus.SelectedItem.Text)
            End If

            Response.Redirect("MenuManager.aspx")
        Catch ex As Exception
            If objConfig.Developer.Equals("1") Then
                objAlert.ErrorBox(Page, "File: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.DeclaringType.Name & _
                                  " --- Function: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.Name & _
                                  " --- Mess: " & ex.Message.Replace("'", """"))
            Else
                objAlert.ErrorBox(Page, "Lỗi kỹ thuật, hãy thông báo lại với Admin, xin cảm ơn.")
            End If
        End Try
    End Sub

    ' Đẩy danh sách menu ra ngoài tynnyl
    Private Sub btnPublish_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnPublish.Click
        ' Goi ham kiem tra quyen them moi
        If Not chkUpdate = 1 Then
            objAlert.ErrorBox(Page, "Bạn không có quuyền sử dụng tính năng này. <br><br>Liên hệ với Admin để biết thêm chi tiết.")
            Exit Sub
        End If
        Try
            Dim srtXML As String = ""
            srtXML &= "<?xml version=""1.0"" encoding=""utf-8"" ?>" & vbCrLf
            srtXML &= "<root>"

            sql = "spi_CatGetListPublish ''"
            objDataRead.ExeReader(sql)
            While objDataRead.dataRead.Read
                srtXML &= vbTab & "<cat>" & vbCrLf
                srtXML &= vbTab & vbTab & "<id>" & objDataRead.dataRead("CatID").ToString() & "</id>" & vbCrLf
                srtXML &= vbTab & vbTab & "<name>" & objDataRead.dataRead("CatPageName").ToString() & "</name>" & vbCrLf
                srtXML &= vbTab & vbTab & "<type>" & objDataRead.dataRead("CatType").ToString() & "</type>" & vbCrLf
                srtXML &= vbTab & vbTab & "<uri>" & objDataRead.dataRead("CatPageNameURI").ToString() & "</uri>" & vbCrLf
                srtXML &= vbTab & vbTab & "<level>1</level>" & vbCrLf
                srtXML &= vbTab & "</cat>" & vbCrLf
                sql = "spi_getSubCat " & objFunction.ValueCheck(objDataRead.dataRead("CatID").ToString())
                objDataRead1.ExeReader(sql)
                While objDataRead1.dataRead.Read
                    srtXML &= vbTab & "<cat>" & vbCrLf
                    srtXML &= vbTab & vbTab & "<id>" & objDataRead1.dataRead("SubCatID").ToString() & "</id>" & vbCrLf
                    srtXML &= vbTab & vbTab & "<name>" & objDataRead1.dataRead("SubCatPageName").ToString() & "</name>" & vbCrLf
                    srtXML &= vbTab & vbTab & "<type>" & objDataRead1.dataRead("SubCatType").ToString() & "</type>" & vbCrLf
                    srtXML &= vbTab & vbTab & "<uri>" & objDataRead1.dataRead("SubCatPageNameURI").ToString() & "</uri>" & vbCrLf
                    srtXML &= vbTab & vbTab & "<level>2</level>" & vbCrLf
                    srtXML &= vbTab & "</cat>" & vbCrLf
                End While
            End While
            srtXML &= "</root>"
            objFunction.CreateFile(Server.MapPath("/") & "static\outSite\listfiles\listCategory.xml", srtXML)
            objFunction.writeLog(Session("UserId"), 1, "Publish danh mục sản phẩm", "", "")
            objAlert.InfoBox(Page, "Publish thành công danh mục", Request.Url.PathAndQuery)
        Catch ex As Exception
            If objConfig.Developer.Equals("1") Then
                objAlert.ErrorBox(Page, "File: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.DeclaringType.Name & _
                                  " --- Function: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.Name & _
                                  " --- Mess: " & ex.Message.Replace("'", """"))
            Else
                objAlert.ErrorBox(Page, "Lỗi kỹ thuật, hãy thông báo lại với Admin, xin cảm ơn.")
            End If
        End Try
    End Sub

    ' Sự kiện hiển thị combobox danh mục cấp 2 trên form thêm mới
    Private Sub cbxLevel_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles cbxLevel.SelectedIndexChanged
        ' Khai bao bien de kiem tra xem chon Menu cap 1 hay cap 2
        Dim chk As Integer = 0
        chk = Convert.ToInt32(cbxLevel.SelectedValue)

        ' Neu la cap 1 thi hidden phan chon menu di
        If chk = 1 Then
            lbCat.Visible = False
            cbxCat.Visible = False
        Else ' con neu chon menu cap 2 thi show ra list menu cap 1
            lbCat.Visible = True
            cbxCat.Visible = True
        End If
    End Sub

    ' Lọc danh mục cấp 2, nếu là dang danh mục sản phẩm thì chỉ show ra danh mục của sản phẩm
    Private Sub cbxType_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles cbxType.SelectedIndexChanged
        ' Khai bao bien de kiem tra xem chon loai danh muc nao
        Dim chk As Integer = 0
        chk = Convert.ToInt32(cbxType.SelectedValue)
        ' Nếu là 0 thì là loại danh mục sản phẩm, 1 la tin tuc
        loadCat(chk)
    End Sub

#End Region

#Region "Các hàm tự viết"

    ' Lấy dự liệu đưa vào Grid View Cat
    Public Sub BindGridCat()
        Try
            sql = "spi_CatGetList ''"

            dsCat.ConnectionString = ConnectionString
            dsCat.SelectCommand = sql

            ' Tạo thêm 1 data source lấy Status cho drop down list khi nhấn nút Edit trên GridView
            sql = "spi_StatusGet"
            dsStt.ConnectionString = ConnectionString
            dsStt.SelectCommand = sql

            gridCat.DataBind()

        Catch ex As Exception
            If objConfig.Developer.Equals("1") Then
                objAlert.ErrorBox(Page, "File: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.DeclaringType.Name & _
                                  " --- Function: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.Name & _
                                  " --- Mess: " & ex.Message.Replace("'", """"))
            Else
                objAlert.ErrorBox(Page, "Lỗi kỹ thuật, hãy thông báo lại với Admin, xin cảm ơn.")
            End If
        End Try
    End Sub

    ' Lấy dự liệu đưa vào Grid View Sub Cat
    Public Sub BindGridSubCat(ByVal idCat As Integer, ByVal objGridSubCat As GridView)
        Try
            sql = "spi_getSubCat " & objFunction.ValueCheck(idCat)

            Dim dts As DataSet = objDataRead.ExeDataset(sql)
            Dim dtt As DataTable = dts.Tables(0)

            objGridSubCat.DataSource = dtt

            ' Tạo thêm 1 data source lấy Cat cho drop down list khi nhấn nút Edit trên SubGridView
            sql = "spi_CatGetList ''"
            dsSubCat.ConnectionString = ConnectionString
            dsSubCat.SelectCommand = sql

            objGridSubCat.DataBind()

        Catch ex As Exception
            If objConfig.Developer.Equals("1") Then
                objAlert.ErrorBox(Page, "File: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.DeclaringType.Name & _
                                  " --- Function: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.Name & _
                                  " --- Mess: " & ex.Message.Replace("'", """"))
            Else
                objAlert.ErrorBox(Page, "Lỗi kỹ thuật, hãy thông báo lại với Admin, xin cảm ơn.")
            End If
        End Try
    End Sub

    ' Tao du lieu cho commbobox Danh Muc lua chon
    Private Sub loadCatLevel()
        cbxLevel.Items.Insert(0, New ListItem("-- Cấp 1 --", "1"))
        cbxLevel.Items.Insert(1, New ListItem("-- Cấp 2 --", "2"))
    End Sub

    ' Lấy dữ liệu vào ComboBox Category
    Private Sub loadCat(ByVal catType As Integer)
        Try
            cbxCat.DataTextField = "CatPageName"
            cbxCat.DataValueField = "CatID"
            cbxCat.DataSource = objData.ExeDataset("spi_CatGetList '" & catType & "'")
            cbxCat.DataBind()
            'cbxCat.Items.Insert(0, New ListItem("-- No Filter --", "-1"))
        Catch ex As Exception
            If objConfig.Developer.Equals("1") Then
                objAlert.ErrorBox(Page, "File: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.DeclaringType.Name & _
                                  " --- Function: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.Name & _
                                  " --- Mess: " & ex.Message.Replace("'", """"))
            Else
                objAlert.ErrorBox(Page, "Lỗi kỹ thuật, hãy thông báo lại với Admin, xin cảm ơn.")
            End If
        End Try
    End Sub

    ' Lấy dữ liệu vào ComboBox Status form Insert New 
    Private Sub loadStt()
        Try
            cbxStatus.Items.Insert(0, New ListItem("-- Tất cả --", "-1"))
            cbxStatus.Items.Insert(1, New ListItem("-- Khóa / Tạm dừng --", "0"))
            cbxStatus.Items.Insert(2, New ListItem("-- Hoạt động --", "1"))

            cbxType.Items.Insert(0, New ListItem("-- Sản phẩm --", "0"))
            cbxType.Items.Insert(1, New ListItem("-- Tin tức --", "1"))
        Catch ex As Exception
            If objConfig.Developer.Equals("1") Then
                objAlert.ErrorBox(Page, "File: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.DeclaringType.Name & _
                                  " --- Function: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.Name & _
                                  " --- Mess: " & ex.Message.Replace("'", """"))
            Else
                objAlert.ErrorBox(Page, "Lỗi kỹ thuật, hãy thông báo lại với Admin, xin cảm ơn.")
            End If
        End Try
    End Sub

    Private Sub BindStatus(ByVal cbo As DropDownList)
        Try
            cbo.DataTextField = "CodeDesc"
            cbo.DataValueField = "CodeValue"
            cbo.DataSource = objData.ExeDataset("spi_StatusGet")
            cbo.DataBind()
            'cbo.Items.Insert(0, New ListItem("-- No Filter --", -1))
            cbo.SelectedValue = -1
        Catch ex As Exception
            If objConfig.Developer.Equals("1") Then
                objAlert.ErrorBox(Page, "File: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.DeclaringType.Name & _
                                  " --- Function: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.Name & _
                                  " --- Mess: " & ex.Message.Replace("'", """"))
            Else
                objAlert.ErrorBox(Page, "Lỗi kỹ thuật, hãy thông báo lại với Admin, xin cảm ơn.")
            End If
        End Try

    End Sub

    ' Format Status trên Grid View
    Public Function getColorStt(ByVal stt As Integer) As String
        If stt = 1 Then
            Return "<span style=""font-weight:bold;color: #00CC00""><b>Hoạt động</b></span>"
        Else
            Return "<span style=""font-weight:bold;color: #FF0000""><b>Khóa \ Tạm dừng</span>"
        End If
    End Function

    ' Kiểm tra dữ liệu nhập trên Form
    Public Function chkField() As Boolean
        Dim flag = True

        If txtCatName.Text = "" Then
            flag = False
            objAlert.ErrorBox(Page, "Hãy nhập giá trị cho mục Tên Danh Mục.")
            Return flag
        End If
        If Not objFunction.IsFullname(txtCatName.Text) Then
            flag = False
            objAlert.ErrorBox(Page, "Tên Danh Mục chỉ bao gồm các chữ cái: A-Z, a-z và số 0-9.")
            Return flag
        End If
        If cbxStatus.SelectedValue = "" Or cbxStatus.SelectedValue = "-1" Then
            flag = False
            objAlert.ErrorBox(Page, "Hãy chọn giá trị Trạng Thái cho đúng.")
            Return flag
        End If

        ' Kiem tra xem ten nhom da co hay chua?
        sql = "select * from Out_Category where CatPageName = " & objFunction.FieldUniCk(txtCatName.Text)
        objDataRead.ExeReader(sql)
        If objDataRead.dataRead.Read Then
            objAlert.ErrorBox(Page, "Tên Danh Mục này đã tồn tại trong hệ thống, hãy chọn tên khác.")
            flag = False
            Return flag
        End If

        Return flag
    End Function
#End Region

End Class